package com.hulk.dryad.persistence.injector.basic.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;

/**
 * @author hulk
 * mapper 父类，注意这个类不要让 mp 扫描到！！
 */
public interface SuperMapper<T> extends BaseMapper<T> {

	/**
	 * 批量保存
	 *
	 * <p>
	 *     注意：此方法是一条 sql，多 value 的形式
	 * </p>
	 *
	 * @param entityList 实体列表
	 * @return 结果数
	 */
	int insertBatch(@Param(Constants.COLLECTION) Collection<T> entityList);

	/**
	 * 插入如果中已经存在相同的记录，则忽略当前新数据
	 *
	 * @param entity 实体对象
	 * @return 更改的条数
	 */
	int insertIgnore(T entity);

	/**
	 * 插入如果中已经存在相同的记录，则忽略当前新数据
	 *
	 * <p>
	 *     注意：此方法是一条 sql，多 value 的形式
	 * </p>
	 *
	 * @param entityList 实体对象列表
	 * @return 更改的条数
	 */
	int insertIgnoreBatch(@Param(Constants.COLLECTION) Collection<T> entityList);

	/**
	 * 表示插入替换数据，需求表中有PrimaryKey，或者unique索引，如果数据库已经存在数据，则用新数据替换，如果没有数据效果则和insert into一样；
	 *
	 * @param entity 实体对象
	 * @return 更改的条数
	 */
	int replace(T entity);

	/**
	 * 批量插入替换数据
	 *
	 * <p>
	 *     注意：此方法是一条 sql，多 value 的形式
	 * </p>
	 *
	 * @param entityList 实体列表
	 * @return 结果数
	 */
	int replaceBatch(@Param(Constants.COLLECTION) Collection<T> entityList);

}
